//package com.letu.core.handler;
//
//import com.alibaba.fastjson.JSONArray;
//import com.letu.core.businmodel.TenantIgnoreTable;
//import com.letu.core.context.ContextUtil;
//import com.letu.core.context.StaticContextUtil;
//import com.letu.core.model.DataIsolationModel;
//import com.letu.core.model.DataScopeEnum;
//import com.letu.core.model.SystemTagEnum;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.stereotype.Component;
//
//import java.util.List;
//import java.util.Map;
//
///**
// * 隔离级别调用
// */
//public class DataScopeHandler {
//
//    /**
//     * 指定多租户隔离方式
//     *
//     * @return
//     */
//    public static String queryTenantSystemScope(String tableName) {
//        String resultDataScope = "";
//        /**
//         * 隔离级别
//         *
//         * 当被调用方为基础服务
//         *    1由调用方指定隔离级别
//         * 当被调用方为业务服务
//         *    1由被调用方指定隔离级别
//         *
//         */
//        if (DataIsolationModel.getSelfTag() != null && SystemTagEnum.COMMON.equals(DataIsolationModel.getSelfTag())) {
//            //被调用方为基础服务
//            resultDataScope = findCallerBasicSystemData();
//        } else {
//            //本项目系统 业务服务数据隔离级别
//            if(DataIsolationModel.getSelfDataScope()!=null){
//                resultDataScope = DataIsolationModel.getSelfDataScope().getCode();
//            }
//        }
//        /**********************表结构隔离级别 start *********************/
//        if (TenantIgnoreTable.baseSystemOrTeamTable.contains(tableName)) {
//            //通过调用方的数据级别来判断租户id
//            resultDataScope = findCallerBasicSystemData();
//        } else if (TenantIgnoreTable.baseSystemTable.contains(tableName)) {
//            //系统隔离
//            resultDataScope = DataScopeEnum.SUB_SYSTEM.getCode();
//        } else if (TenantIgnoreTable.baseTeamTable.contains(tableName)) {
//            //团队隔离
//            resultDataScope = DataScopeEnum.TEAM.getCode();
//        } else if (TenantIgnoreTable.baseProjectTable.contains(tableName)) {
//            //项目隔离
//            resultDataScope = DataScopeEnum.PROJECT.getCode();
//        }
//        /**********************表结构隔离级别 end *********************/
//
//        if (StringUtils.isNotBlank(resultDataScope)) {
//            if (DataScopeEnum.TEAM.getCode().equals(resultDataScope)) {
//                if (ContextUtil.getTeamId() != null && ContextUtil.getTeamId() != 0) {
//                    resultDataScope = DataScopeEnum.TEAM.getCode();
//                } else {
//                    //如果团队ID为空，则使用系统ID，场景：服务既有团队也有系统
//                    resultDataScope = DataScopeEnum.SUB_SYSTEM.getCode();
//                }
//
//            }
//        } else {
//            //说明:基础服务自己调自己   一级级向下：优先团队id，其次系统id，最后项目id
//            if (ContextUtil.getTeamId() != null && ContextUtil.getTeamId() != 0) {
//                resultDataScope = DataScopeEnum.TEAM.getCode();
//            } else if (ContextUtil.getSubSystemId() != null && ContextUtil.getSubSystemId() != 0) {
//                resultDataScope = DataScopeEnum.SUB_SYSTEM.getCode();
//            } else if (ContextUtil.getProjectId() != null && ContextUtil.getProjectId() != 0) {
//                resultDataScope = DataScopeEnum.PROJECT.getCode();
//            }
//        }
//        return resultDataScope;
//    }
//
//
//    /**
//     * 指定子租户ID
//     *
//     * @param resultDataScope
//     * @return
//     */
//    public static Long queryTenantId(String resultDataScope) {
//        Long tenantId = null;
//        if (DataScopeEnum.PROJECT.getCode().equals(resultDataScope)) {
//            tenantId = ContextUtil.getProjectId() == null ? null : ContextUtil.getProjectId();
//        } else if (DataScopeEnum.SUB_SYSTEM.getCode().equals(resultDataScope)) {
//            tenantId = ContextUtil.getSubSystemId() == null ? null : ContextUtil.getSubSystemId();
//        } else if (DataScopeEnum.TEAM.getCode().equals(resultDataScope)) {
//            tenantId = ContextUtil.getTeamId();
//        }
//        return tenantId;
//    }
//    /**
//     * 指定子租户字段
//     *
//     * @param resultDataScope
//     * @return
//     */
//    public static String queryTenantField(String resultDataScope) {
//        if (DataScopeEnum.PROJECT.getCode().equals(resultDataScope)) {
//            return "project_id";
//        } else if (DataScopeEnum.SUB_SYSTEM.getCode().equals(resultDataScope)) {
//           return "subsystem_id";
//        } else if (DataScopeEnum.TEAM.getCode().equals(resultDataScope)) {
//            return "team_id";
//        }
//        return "project_id";
//    }
//
//    /**
//     * 调用基础服务的数据隔离级别
//     *
//     * @param listStr
//     * @return
//     */
//    public static String findBasicDataScope(String listStr) {
//        if (StringUtils.isBlank(listStr)) {
//            return null;
//        }
//        List<Map> mapList = JSONArray.parseArray(listStr, Map.class);
//        if (mapList == null || mapList.isEmpty()) {
//            return null;
//        }
//        for (Map map : mapList) {
//            Long projectId = (Long) map.get("projectId");
//            Long systemId = (Long) map.get("systemId");
//            String dataScope = (String) map.get("dataScope");
//            String systemType = (String) map.get("systemType");
//            if (projectId.equals(ContextUtil.getProjectId())) {
//                return dataScope;
//            }
//        }
//        return null;
//    }
//
//
//
//    /**
//     * 设置调用基础服务的隔离级别
//     */
//    public static String findCallerBasicSystemData() {
//        //传输的调用数据隔离值
//        if (ContextUtil.getTeamId() != null) {
//            return DataScopeEnum.TEAM.getCode();
//        } else if (ContextUtil.getSubSystemId() != null) {
//            return DataScopeEnum.SUB_SYSTEM.getCode();
//        } else {
//            return DataScopeEnum.PROJECT.getCode();
//        }
//    }
//
//    public static Long findSystemId(String listStr) {
//        if (StringUtils.isBlank(listStr)) {
//            return null;
//        }
//        List<Map> mapList = JSONArray.parseArray(listStr, Map.class);
//        if (mapList == null || mapList.isEmpty()) {
//            return null;
//        }
//        for (Map map : mapList) {
//            Long projectId = (Long) map.get("projectId");
//            Long systemId = (Long) map.get("systemId");
//            String dataScope = (String) map.get("dataScope");
//            if (projectId.equals(ContextUtil.getProjectId())) {
//                return systemId;
//            }
//        }
//        return null;
//    }
//
//}
